package tec;

import java.util.ArrayList;
import java.util.List;
import java.util.LinkedList;

public class GreffonAUn  implements Bus, Transport{
	
	Autobus autobus;
	
	int arret;
	List <Passager> passagers;
	
	Collecte collecte;
	
	public GreffonAUn (int assises, int debouts)
	{
		autobus = new Autobus(assises, debouts);
		arret = 0;
		collecte = new CollecteMem();
		passagers = new LinkedList <Passager>();
	}
	
	public GreffonAUn (int assises, int debouts, String fichier)
	{
		this(assises, debouts);
		collecte = new CollecteFichier(fichier);
	}


    public void printCollected() {
		collecte.printCollected();
	}

    public boolean aPlaceAssise() {
		return autobus.aPlaceAssise();
	}
    public boolean aPlaceDebout() {
		return autobus.aPlaceDebout();
	}
    public void demanderPlaceAssise(Passager p) {
		collecte.uneEntree();
		passagers.add(p);
		autobus.demanderPlaceAssise(p);
	}
    public void demanderPlaceDebout(Passager p) {
		collecte.uneEntree();
		passagers.add(p);
		autobus.demanderPlaceDebout(p);
	}
    public void demanderSortie(Passager p) {
		collecte.uneSortie();
		passagers.remove(p);
		autobus.demanderSortie(p);
	}
    public void demanderChangerEnDebout(Passager p) {
		autobus.demanderChangerEnDebout(p);
	}
    public void demanderChangerEnAssis(Passager p) {
		autobus.demanderChangerEnAssis(p);
	}
	public void allerArretSuivant() throws TecInvalidException {
		collecte.changerArret();
		arret++;
		
		List <Passager> pCopie = new LinkedList<Passager>(passagers);

		for(Passager p : pCopie) {
			try {
				p.nouvelArret(this, this.arret);
			} catch (IllegalStateException e) {
				throw new TecInvalidException(e);
			}
		}
	}
	
	public String toString() {
		
		return "[arret:" + arret + ", assis:" + autobus.nbPlaceAssises + ", debout:" + autobus.nbPlaceDebout + "]"; 
	}


}
